package utiles;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import negocio.*;
import dto.DTOCliente;
import dto.DTOCondicionDePago;
import dto.DTOCondicionDePagoCliente;
import dto.DTOCondicionDePagoProveedor;
import dto.DTOCondicionTributaria;
import dto.DTODescuentoProveedor;
import dto.DTOItemListaDePrecios;
import dto.DTOListaDePrecios;
import dto.DTOMarca;
import dto.DTONacionalidad;
import dto.DTOProducto;
import dto.DTOProveedor;
import dto.DTOSKF;

public class Converters
{
	/*********************************************************************/
	
	public static DTOCondicionDePago convertToDTO(CondicionDePago entidad)
	{
		DTOCondicionDePago dto = new DTOCondicionDePago(entidad.getCodigo(), entidad.getNombre());
		return dto;
	}
	public static CondicionDePago convertToEntity(DTOCondicionDePago dto)
	{
		CondicionDePago entidad = new CondicionDePago(dto.getCodigo(), dto.getNombre());
		return entidad;
	}
	
	/*********************************************************************/
	
	public static DTOMarca convertToDTO(Marca entidad)
	{
		DTOMarca dto = new DTOMarca(entidad.getCodigo(), entidad.getNombre());
		return dto;
	}
	public static Marca convertToEntity(DTOMarca dto)
	{
		Marca entidad = new Marca(dto.getCodigo(), dto.getNombre());
		return entidad;
	}
	
	/*********************************************************************/
	
	public static DTONacionalidad convertToDTO(Nacionalidad entidad)
	{
		DTONacionalidad dto = new DTONacionalidad(entidad.getCodigo(), entidad.getNombre());
		return dto;
	}
	public static Nacionalidad convertToEntity(DTONacionalidad dto)
	{
		Nacionalidad entidad = new Nacionalidad(dto.getCodigo(), dto.getNombre());
		return entidad;
	}	
	/*********************************************************************/
	
	public static SKF convertToEntity(DTOSKF dto)
	{
		SKF entidad = new SKF(dto.getCodigo(), dto.getMedida(), dto.getTipo());
		return entidad;
	}
	
	
	public static DTOSKF convertToDTO(SKF entidad)
	{
		DTOSKF dto = new DTOSKF(entidad.getCodigo(), entidad.getMedida(), entidad.getTipo());
		return dto;
	}
	
	/*********************************************************************/
	
	public static DTOProducto convertToDTO(Producto entidad)
	{
		DTOProducto dto = new DTOProducto(entidad.getCodigo(),
										entidad.getNombre(),
										entidad.getDescripcion(),
										entidad.getCaracteristicas(),
										Converters.convertToDTO(entidad.getSkf()),
										Converters.convertToDTO(entidad.getMarca()), 
										Converters.convertToDTO(entidad.getNacionalidad())
										, entidad.getActivo());
		return dto;
	}
	
	
	public static Producto convertToEntity(DTOProducto dto)
	{
		Producto p = new Producto(dto.getNombre(),
									dto.getDescripcion(),
									dto.getCaracteristicas(),
									convertToEntity(dto.getSkf()),
									convertToEntity(dto.getNacionalidad()),
									convertToEntity(dto.getMarca()),
									dto.getActivo());
		return p;
	}
	
	/*********************************************************************/

	public static DTOCliente convertToDTO(Cliente entidad) {
		DTOCliente dtoCliente = new DTOCliente(entidad.getCodigo(),entidad.getNombre(),entidad.getCuit(),entidad.getDireccion(),entidad.getTelefono());
		Iterator<CondicionDePagoCliente> icpp = entidad.getCondicionesDePago().iterator();
		while(icpp.hasNext())
		{
			dtoCliente.getCondicionesDePago().add(convertToDTO(icpp.next()));
		}

		return dtoCliente;

	}	

	public static DTOCondicionDePagoCliente convertToDTO(CondicionDePagoCliente entidad)
	{
		DTOCondicionDePago condicion = convertToDTO(entidad.getCondicionDePago());
		DTOCondicionDePagoCliente dto = new DTOCondicionDePagoCliente(entidad.getCodigo(), condicion, entidad.getInteres());		
		return dto;
	}
	
	/*********************************************************************/
	public static DTOProveedor convertToDTO(Proveedor entidad)
	{		
		DTOProveedor dtoProveedor = new DTOProveedor(entidad.getCodigo(), entidad.getNombre(), entidad.getCuit(), entidad.getDireccion(), entidad.getTelefono());
		Iterator<CondicionDePagoProveedor> icpp = entidad.getCondicionesDePago().iterator();
		while(icpp.hasNext())
		{
			dtoProveedor.getCondicionesDePago().add(convertToDTO(icpp.next()));
		}
		
		Iterator<DescuentoProveedor> idp = entidad.getDescuentos().iterator();
		while(idp.hasNext())
		{
			dtoProveedor.getDescuentos().add(convertToDTO(idp.next()));
		}

		return dtoProveedor;
	}
	
	public static DTOCondicionDePagoProveedor convertToDTO(CondicionDePagoProveedor entidad)
	{
		DTOCondicionDePago condicion = convertToDTO(entidad.getCondicionDePago());
		DTOCondicionDePagoProveedor dto = new DTOCondicionDePagoProveedor(entidad.getCodigo(), condicion, entidad.getInteres());		
		return dto;
	}
	
	public static DTODescuentoProveedor convertToDTO(DescuentoProveedor entidad)
	{
		DTODescuentoProveedor dto = new DTODescuentoProveedor();
		dto.setCodigo(entidad.getCodigo());
		dto.setNombre(entidad.getNombre());
		dto.setDescuento(entidad.getDescuento());
		
		if (DescuentoProveedorCondicionDePago.class.isInstance(entidad)){
			DescuentoProveedorCondicionDePago obj = (DescuentoProveedorCondicionDePago)entidad;
			dto.setCondicionDePago(convertToDTO(obj.getCondicionDePago()));
			dto.setTipo("CONDICIONPAGO");
		}else{
			DescuentoProveedorProductoCantidad obj = (DescuentoProveedorProductoCantidad)entidad;
			dto.setCantidad(obj.getCantidad());
			dto.setProducto(convertToDTO(obj.getProducto()));
			dto.setTipo("PRODUCTOCANTIDAD");
		}
		
		return dto;
	}

	/*********************************************************************/
	
	
	public static ListaDePreciosProveedor convertToEntity(DTOListaDePrecios dtoLDPrecios) {
		
		Set<ListaDePreciosItem> itemsListaDePrecios = new HashSet<ListaDePreciosItem>();
        if(dtoLDPrecios.getItems()!=null)
        {
			for (DTOItemListaDePrecios dtoILDPrecios : dtoLDPrecios.getItems()) {
			        itemsListaDePrecios.add(convertToEntity(dtoILDPrecios));
			        
			}
        }
        
		ListaDePreciosProveedor listaDePrecios = new ListaDePreciosProveedor();
		listaDePrecios.setCodigo(dtoLDPrecios.getCodigo());
		listaDePrecios.setFechaInicio(dtoLDPrecios.getFechaInicio());
		listaDePrecios.setFechaFin(dtoLDPrecios.getFechaFin());
		listaDePrecios.setItems(itemsListaDePrecios);
		listaDePrecios.setNumero(dtoLDPrecios.getNumero());
		listaDePrecios.setTipoDeLista(dtoLDPrecios.getTipoDeLista()); 

		return listaDePrecios;
	}
	
	public static ListaDePreciosItem convertToEntity(DTOItemListaDePrecios dtoILDPrecios) {
		ListaDePreciosItem iLDPrecios = new ListaDePreciosItem();
		
		iLDPrecios.setCodigo(dtoILDPrecios.getCodigo());
		iLDPrecios.setPrecio(dtoILDPrecios.getPrecio());
		iLDPrecios.setProducto(convertToEntity(dtoILDPrecios.getProducto()));
		iLDPrecios.setStock(dtoILDPrecios.getStock());
			
		return iLDPrecios;
	}
	/*
	public static ItemPedidoProveedor convertToEntity(DTOItemPedidoProveedor dtoPedProv){
		ItemPedidoProveedor iPedProv = 
				new ItemPedidoProveedor(dtoPedProv.getIdItemPedidoProveedor(),
										dtoPedProv.getCantidad(),
										dtoPedProv.getPrecio(),
										convertToEntity(dtoPedProv.getProducto()));
		return iPedProv;
	}
	
	public static PedidoProveedor convertToEntity(DTOPedidoProveedor pedido) {

		Set<ItemPedidoProveedor> itemPedidoProveedor = new HashSet<ItemPedidoProveedor>();
        for (DTOItemPedidoProveedor dtoPedProv : pedido.getItemPedidoProveedors()) {
                itemPedidoProveedor.add(convertToEntity(dtoPedProv));
        }
		
		PedidoProveedor p = new PedidoProveedor(pedido.getIdPedidoProveedor(), 
												convertToEntity(pedido.getProveedor()), 
												pedido.getFecha(), 
												itemPedidoProveedor);
		return p;
	}	
	
	public static DTOPedidoProveedor convertToDTO(PedidoProveedor pedProv) {
		Set<DTOItemPedidoProveedor> dtoItemPedidoProveedor 
		   = new HashSet<DTOItemPedidoProveedor>();
		DTOItemPedidoProveedor dtoItem;
		
		for (ItemPedidoProveedor item: pedProv.getItemPedidoProveedors()) {
			dtoItem = new DTOItemPedidoProveedor();
			dtoItem.setIdItemPedidoProveedor(item.getIdItemPedidoProveedor());
			dtoItem.setCantidad(item.getCantidad());
			dtoItem.setPrecio(item.getPrecio());
			dtoItem.setProducto(convertToDTO(item.getProducto()));
			dtoItemPedidoProveedor.add(dtoItem);
			
		}
		
		DTOPedidoProveedor dtoPedidoProveedor = new DTOPedidoProveedor(
				pedProv.getIdPedidoProveedor(),
				Converters.convertToDTO(pedProv.getProveedor()),
				pedProv.getFecha(),
				dtoItemPedidoProveedor);
		return dtoPedidoProveedor;
	}
	*/

}




